import os
from asyncio import sleep

import telebot

from llm_response.llm_response import ask_llm
from uitls.re_extraction import re_exr, re_exr_file, re_exr_operation_people

# Bot Token
TOKEN = '7702930752:AAGYV0-kGJgMTavSPKxqdgo8tkR_gdthYJI'
bot = telebot.TeleBot(TOKEN)

# 获取机器人的用户名（比如 bot 的 username 是 mytestbot）
bot_username = 'zynth_core_bot'  # 不要带 @，直接写用户名

# 设置代理（如不需要可注释）
# telebot.apihelper.proxy = {
#     'http': 'http://127.0.0.1:7897',
#     'https': 'http://127.0.0.1:7897',
# }

# 保存路径
SAVE_DIR = '/home/admin/data/data/aicustomer-service/img'
os.makedirs(SAVE_DIR, exist_ok=True)


def save_file(file_id, filename=None):
    # 获取文件信息
    file_info = bot.get_file(file_id)
    downloaded_file = bot.download_file(file_info.file_path)

    if not filename:
        filename = os.path.basename(file_info.file_path)

    # 保存文件到本地
    save_path = os.path.join(SAVE_DIR, filename)
    with open(save_path, 'wb') as f:
        f.write(downloaded_file)
    print(f"✅ 已保存文件: {save_path}")
    return save_path


# /start 命令处理器
@bot.message_handler(commands=['start'])
def start_message(message):
    bot.send_message(message.chat.id, "你好，欢迎使用这个 Bot！")


# 文本消息
@bot.message_handler(func=lambda message: True)
def handle_text(message):
    user = message.from_user.first_name
    text = message.text
    chat_id = message.chat.id
    print(f"[文本] 来自 {user} ({chat_id}): {text}")
    if message.chat.type in ["group", "supergroup"]:
        # 群组中，判断是否 @ 了机器人
        if f"@{bot_username}" in message.text:
            if len(message.text) == 15:
                bot.reply_to(message, "你 @ 了我，我来了～ 我有什么可以帮助你的吗 🤖")
            else:
                if ask_llm(text) == 'y':
                    bot.reply_to(message, re_exr(text))
                else:
                    bot.reply_to(message, re_exr_operation_people())
        else:
            if ask_llm(text) == 'y':
                bot.reply_to(message, re_exr(text))
            else:
                print("没有输出")
    else:
        # 私聊中，直接回复
        bot.reply_to(message, "你好，我是机器人！")


# 文件（document
@bot.message_handler(content_types=['document'])
def handle_document(message):
    user = message.from_user.first_name
    chat_id = message.chat.id
    file_id = message.document.file_id
    filename = message.document.file_name
    text = message.caption
    save_path = save_file(file_id, filename)
    print(f"[文件] 来自 {user} ({chat_id}): 文件名 = {filename}")
    if ask_llm(text) == 'y':
        bot.reply_to(message, re_exr_file(text, save_path))
    else:
        print("没有输出")


# 图片（取最大尺寸一张）
@bot.message_handler(content_types=['photo'])
def handle_photo(message):
    user = message.from_user.first_name
    chat_id = message.chat.id
    file_id = message.photo[-1].file_id  # 获取最大尺寸的图片
    filename = f"{message.message_id}_photo.jpg"
    save_file(file_id, filename)
    print(f"[图片] 来自 {user} ({chat_id})")
    bot.reply_to(message, "你发送了一张图片，已保存。")


# 语音
@bot.message_handler(content_types=['voice'])
def handle_voice(message):
    user = message.from_user.first_name
    chat_id = message.chat.id
    file_id = message.voice.file_id
    filename = f"{message.message_id}_voice.ogg"
    save_file(file_id, filename)
    print(f"[语音] 来自 {user} ({chat_id})")
    bot.reply_to(message, "你发送了语音，已保存。")


# 视频
@bot.message_handler(content_types=['video'])
def handle_video(message):
    user = message.from_user.first_name
    chat_id = message.chat.id
    file_id = message.video.file_id
    filename = f"{message.message_id}_video.mp4"
    save_file(file_id, filename)
    print(f"[视频] 来自 {user} ({chat_id})")
    bot.reply_to(message, "你发送了视频，已保存。")


# 启动 Bot
print("🤖 Bot 正在运行...")
bot.polling(none_stop=True)
